home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / smtpserver_detect.nasl < prev    next >
Text File  |  2005-03-31  |  7KB  |  211 lines

  1. #
  2. # This script was written by Noam Rathaus <noamr@securiteam.com>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6.  
  7. if(description)
  8. {
  9.  script_id(10263);
  10.  script_version ("$Revision: 1.37 $");
  11.  
  12.  name["english"] = "SMTP Server type and version";
  13.  script_name(english:name["english"]);
  14.  
  15.  desc["english"] = "This detects the SMTP Server's type and version by connecting to the server
  16. and processing the buffer received.
  17. This information gives potential attackers additional information about the
  18. system they are attacking. Versions and Types should be omitted
  19. where possible.
  20.  
  21. Solution: Change the login banner to something generic.
  22.  
  23. Risk factor : Low";
  24.  
  25.  script_description(english:desc["english"]);
  26.  
  27.  summary["english"] = "SMTP Server type and version";
  28.  script_summary(english:summary["english"]);
  29.  
  30.  script_category(ACT_GATHER_INFO);
  31.  
  32.  script_copyright(english:"This script is Copyright (C) 1999 SecuriTeam");
  33.  family["english"] = "General";
  34.  script_family(english:family["english"]);
  35.  
  36.  script_dependencie("find_service_3digits.nasl");
  37.  script_require_ports("Services/smtp", 25);
  38.  exit(0);
  39. }
  40.  
  41. #
  42. # The script code starts here
  43. #
  44. include("smtp_func.inc");
  45.  
  46. port = get_kb_item("Services/smtp");
  47. if (!port) port = 25;
  48.  
  49. if (get_port_state(port))
  50. {
  51.  soctcp25 = open_sock_tcp(port);
  52.  
  53.  if (soctcp25)
  54.  {
  55.   bannertxt = smtp_recv_banner(socket:soctcp25);
  56.  
  57.   if(!bannertxt){
  58.         set_kb_item(name:"SMTP/wrapped", value:TRUE);
  59.         close(soctcp25);
  60.         exit(0);
  61.         }
  62.  
  63.   if( ! ("220" >< bannertxt)) {
  64.         # Doesn't look like SMTP...
  65.         close(soctcp25);
  66.         exit(0);
  67.   }
  68.  
  69.   send(socket:soctcp25, data:string("EHLO ",this_host(),"\r\n"));
  70.   ehlotxt = smtp_recv_line(socket:soctcp25);
  71.   send(socket: soctcp25, data:string("HELP\r\n"));
  72.   helptxt = smtp_recv_line(socket:soctcp25);
  73.   send(socket: soctcp25, data:string("NOOP\r\n"));
  74.   nooptxt = smtp_recv_line(socket:soctcp25);
  75.   send(socket: soctcp25, data:string("RSET\r\n"));
  76.   rsettxt = smtp_recv_line(socket:soctcp25);
  77.   send(socket: soctcp25, data:string("QUIT\r\n"));
  78.   quittxt = smtp_recv_line(socket:soctcp25);
  79.  
  80.   #display("banner=[",bannertxt,"]\nehlo=[",ehlotxt,"]\nhelp=[",helptxt,"]\nnoop=[",nooptxt,"]\nrset=[",rsettxt,"]\nquit=[",quittxt,"]\n");
  81.  
  82.   if (("Exim" >< bannertxt) ||
  83.       (("closing connection" >< quittxt) && ("OK" >< nooptxt) && ("Commands supported:" >< helptxt)))
  84.   {
  85.    set_kb_item(name:"SMTP/exim", value:TRUE);
  86.    guess = "Exim";
  87.    str = egrep(pattern:" Exim ", string:bannertxt);
  88.    if(str) {
  89.      str=ereg_replace(pattern:"^.*Exim ([0-9\.]+) .*$", string:str, replace:"\1");
  90.      guess=string("Exim version ",str);
  91.    }
  92.   }
  93.  
  94.   if (("qmail" >< bannertxt) || ("qmail" >< helptxt))
  95.   {
  96.    set_kb_item(name:"SMTP/qmail", value:TRUE);
  97.    guess = "Qmail";
  98.   }
  99.   
  100.   if ("Postfix" >< bannertxt)
  101.   {
  102.    set_kb_item(name:"SMTP/postfix", value:TRUE);
  103.    guess = "Postfix";
  104.   }
  105.   
  106.   if(("Sendmail" >< bannertxt) || ("This is sendmail version" >< helptxt) || ("sendmail-bugs@sendmail.org" >< helptxt))
  107.   {
  108.    set_kb_item(name:"SMTP/sendmail", value:TRUE);
  109.    guess = "Sendmail";
  110.    str = egrep(pattern:"This is sendmail version ", string:helptxt);
  111.    if(str) {
  112.      str=ereg_replace(pattern:".*This is sendmail version ", string:str, replace:"");
  113.      guess=string("Sendmail version ",str);
  114.    }
  115.   }
  116.   
  117.   if("XMail " >< bannertxt)
  118.   {
  119.    set_kb_item(name:"SMTP/xmail", value:TRUE);
  120.    guess = "XMail";
  121.   }
  122.   
  123.   if(egrep(pattern:".*nbx.*Service ready.*", string:bannertxt))
  124.   {
  125.    set_kb_item(name:"SMTP/3comnbx", value: TRUE);
  126.   }
  127.   
  128.   if(("Microsoft Exchange Internet Mail Service" >< bannertxt) ||
  129.      ("NTLM LOGIN" >< bannertxt) ||
  130.      ("Microsoft ESMTP MAIL Service, Version: 5" >< bannertxt) ||
  131.      ("Microsoft SMTP MAIL" >< bannertxt) ||
  132.      (("This server supports the following commands" >< helptxt) && ("End of HELP information" >< helptxt) &&
  133.      ("Service closing transmission channel" >< quittxt) && ("Resetting" >< rsettxt)))
  134.   {
  135.    set_kb_item(name:"SMTP/microsoft_esmtp_5", value:TRUE);
  136.    guess = "Microsoft Exchange version 5.X";
  137.    str = egrep(pattern:" Version: ", string:bannertxt);
  138.    if(str) {
  139.      str=ereg_replace(pattern:".* Version: ", string:str, replace:"");
  140.      guess=string("Microsoft Exchange version ",str);
  141.    }
  142.   }
  143.  
  144.   if(("ZMailer Server" >< bannertxt) ||
  145.     (("This mail-server is at Yoyodyne Propulsion Inc." >< helptxt) && # Default help text.
  146.      ("Out" >< quittxt) && ("zmhacks@nic.funet.fi" >< helptxt))) {
  147.    set_kb_item(name:"SMTP/zmailer", value:TRUE);
  148.    guess = "ZMailer";
  149.    str = egrep(pattern:" ZMailer ", string:bannertxt);
  150.    if(str) {
  151.      str=ereg_replace(pattern:"^.*ZMailer Server ([0-9a-z\.\-]+) .*$", string:str, replace:"\1");
  152.      guess=string("ZMailer version ",str);
  153.    }
  154.   }
  155.  
  156.   if("CheckPoint FireWall-1" >< bannertxt)
  157.   {
  158.    set_kb_item(name:"SMTP/firewall-1", value: TRUE);
  159.    guess="CheckPoint FireWall-1";
  160.   }
  161.  
  162.   if(("InterMail" >< bannertxt) ||
  163.     (("This SMTP server is a part of the InterMail E-mail system" >< helptxt) &&
  164.     ("Ok resetting state." >< rsettxt) && ("ESMTP server closing connection." >< quittxt))) {
  165.    set_kb_item(name:"SMTP/intermail", value:TRUE);
  166.    guess = "InterMail";
  167.    str = egrep(pattern:"InterMail ", string:bannertxt);
  168.    if(str) {
  169.      str=ereg_replace(pattern:"^.*InterMail ([A-Za-z0-9\.\-]+).*$", string:str, replace:"\1");
  170.      guess=string("InterMail version ",str);
  171.    }
  172.   }
  173.  
  174.   if(("Lotus Domino" >< bannertxt) ||
  175.     (("pleased to meet you" >< ehlotxt) && ("Enter one of the following commands" >< helptxt) &&
  176.     ("Reset state" >< rsettxt) && ("SMTP Service closing transmission channel" >< quittxt))) {
  177.    set_kb_item(name:"SMTP/domino", value:TRUE);
  178.    guess = "Domino";
  179.    str = egrep(pattern:"Lotus Domino ", string:bannertxt);
  180.    if(str) {
  181.      str=ereg_replace(pattern:"^.*\(Lotus Domino Release ([0-9\.\-]+)\).*$", string:str, replace:"\1");
  182.      guess=string("Lotus Domino version ",str);
  183.    }
  184.   }
  185.  
  186.   if (    "mail rejector" >< bannertxt ||
  187.     match(pattern: "*snubby*", string: ehlotxt, icase: 1))
  188.   {
  189.     set_kb_item(name: "SMTP/snubby", value: TRUE);
  190.     set_kb_item(name: "SMTP/wrapped", value: TRUE);
  191.     guess = "Snubby Mail Rejector (not a real server)";
  192.     security_note(port: port, data: "
  193. Verisign mail rejector appears to be running on this port.
  194. You probably mistyped your hostname and Nessus is scanning the wildcard
  195. address in the .COM or .NET domain.
  196.  
  197. Solution : enter a correct hostname
  198.  
  199. Risk factor : None");
  200.   }
  201.  
  202.   data = string("Remote SMTP server banner :\n",  bannertxt);
  203.   if (guess) {
  204.    data=string(data, "\n\n\nThis is probably: ",guess);
  205.   }
  206.   security_note(port:port, data:data);
  207.  close(soctcp25);
  208.  }
  209.  
  210. }
  211.